package com.enbatis.mybatisplugs.service.impl;

import com.enbatis.mybatisplugs.base.BaseServiceImpl;

import com.enbatis.mybatisplugs.commons.sql.Wrapper;
import com.enbatis.mybatisplugs.entity.SysDept;
import com.enbatis.mybatisplugs.entity.dto.DeptDTO;
import com.enbatis.mybatisplugs.entity.vo.SysDeptVO;
import com.enbatis.mybatisplugs.mapper.SysDeptMapper;
import com.enbatis.mybatisplugs.plugin.Pages;
import com.enbatis.mybatisplugs.service.SysDeptService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
* 描述：
* @author wangweidong
* @date 2019-11-13 09:34:05
*/

@Service
public class SysDeptServiceImpl extends BaseServiceImpl<SysDeptMapper,SysDept > implements SysDeptService {


    @Override
    public List<DeptDTO> getDeptDTOList(SysDept sysDept) {

        List<SysDept> list=list(new Wrapper<>(sysDept).setSqlSelect("id,pid,name").orderBy("seq",true));

        List<DeptDTO> deptDTOList = new ArrayList<>();

        List<DeptDTO> deptDTONotParentList = new ArrayList<>();
        for (SysDept dept:list) {
            if (dept.getPid()==0){
                DeptDTO deptDTO = new DeptDTO();
                deptDTO.setId(dept.getId());
                deptDTO.setLabel(dept.getName());
                deptDTOList.add(deptDTO);
            }else{
                DeptDTO deptDTO = new DeptDTO();
                deptDTO.setId(dept.getId());
                deptDTO.setLabel(dept.getName());
                deptDTO.setPid(dept.getPid());
                deptDTONotParentList.add(deptDTO);
            }
        }

        if (CollectionUtils.isNotEmpty(deptDTONotParentList)){

            List<SysDept> deptList=  list.stream().filter(i->i.getPid()!=0).collect(Collectors.toList());
            for (DeptDTO dto:deptDTONotParentList) {
                for (SysDept depart:deptList) {
                   if (depart.getPid().equals(dto.getId())){
                       DeptDTO deptDTO=new DeptDTO();
                       deptDTO.setPid(dto.getId());
                       deptDTO.setLabel(depart.getName());
                       deptDTO.setId(depart.getId());
                       dto.getChildren().add(deptDTO);
                   }
                }
            }


            for (DeptDTO pre:deptDTONotParentList) {
                pre.getChildren().clear();
                for (DeptDTO end:deptDTONotParentList) {
                      if (pre.getId().equals(end.getPid())){
                          pre.getChildren().add(end);
                      }
                }
            }



            for ( DeptDTO deptDTO:deptDTOList) {
                for (DeptDTO dto:deptDTONotParentList) {
                    if (dto.getPid().equals(deptDTO.getId())){
                        deptDTO.getChildren().add(dto);
                    }
                }
            }

        }
        return deptDTOList;
    }

    @Override
    public Pages<SysDeptVO> pageVO(Page<SysDeptVO> page, SysDeptVO sysDeptVO) {
        Page returnPage= PageHelper.startPage(page.getPageNum(),page.getPageSize(),page.getOrderBy());
        baseMapper.selectVOList(sysDeptVO);
        return new Pages<>(returnPage);
    }
}
